package com.gaogzhen.designPattern.hesitation;

import lombok.extern.slf4j.Slf4j;

import java.util.concurrent.TimeUnit;

@Slf4j(topic = "c.Hesitation")
public class Hesitation {
    // 监控线程
    private Thread monitorThread;
    // 结束标记
    private  boolean stop = false;
    // 唯一性标志
    private boolean isStarting = false;

    // 启动监控线程
    public void start() {
        synchronized (this) {
            // 判断监控线程是否已经启动，如果已启动，终止重新启动
            if (isStarting) {
                return;
            }

            monitorThread = new Thread(() -> {
                Thread current = Thread.currentThread();
                // 判断是否被打断
                while (true) {
                    if (stop) {
                        log.debug("清理工作...");
                        break;
                    }

                    try {
                        // 工作内容
                        // 模拟花费的时间
                        TimeUnit.SECONDS.sleep(1);
                        log.debug("执行监控记录");
                    } catch (InterruptedException e) {
                        // 异常处理
                    }
                }
            }, "monitor");

            monitorThread.start();
            isStarting = true;
        }
    }

    // 停止监控线程
    public void stop() {
        stop = true;
        // 如果线程在睡眠，可立即结束线程
        monitorThread.interrupt();
    }
}
